import axios from 'axios';

// ============================
// 全局请求封装
// - 统一通过 Vite 代理转发到后端（避免跨域）
// - 在请求拦截器里自动附加 token / userId / sessionId
// - 在响应拦截器里统一返回 response.data 并打印常见状态码
// ============================

// 设置基础URL为代理路径，所有请求将通过Vite代理，以解决CORS问题
const API_BASE_URL = "/api";

// 创建axios实例
// 默认以 JSON 发送；如需表单提交，请在单个请求里覆盖 headers
const request = axios.create({
  baseURL: API_BASE_URL,
  // baseURL: 'http://172.27.6.139/api',
  timeout: 10000,
  headers: {
    // 自定义头
    "X-Custom-Header": "value",
    'Content-Type': 'application/json',
  },
});

// 创建 Axios 实例
// const request = axios.create({
//     baseURL: API_BASE_URL,
//     // baseURL: 'http://10.59.9.18',
//     timeout: 10000,
//     headers: {
//         'sessionId': '1755432281585626',
//         'Content-Type': 'application/x-www-form-urlencoded/json',
//         'ak': '0110010010000',
//         'userId': 626,
//     },
// });

// 请求拦截器：统一附加身份信息
request.interceptors.request.use(
    (config) => {
        // 在请求之前做一些操作，例如添加认证信息
        const token = localStorage.getItem('token');
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }
        // 附带会话信息，兼容需要在请求头携带 userId / sessionId 的接口
        const sessionId = localStorage.getItem('sessionId');
        const userId = localStorage.getItem('userId');
        if (sessionId) {
            config.headers['sessionId'] = sessionId;
        }
        if (userId) {
            config.headers['userId'] = userId;
        }
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截器：统一只返回数据部分，并打印常见错误码方便排查
request.interceptors.response.use(
    (response) => {
        return response.data;
    },
    (error) => {
        if (error?.response) {
            switch (error.response.status) {
                case 400: console.log("请求错误"); break;
                case 401: console.log("未授权访问"); break;
                case 404: console.log("资源找不到"); break;
                default: console.log("其他错误信息");
            }
        }
        return Promise.reject(error);
    }
);

export default request;
